package com.neu.utils.excel.processor;

import com.neu.entity.User;
import com.neu.entity.security.LoginUser;
import com.neu.utils.excel.DataProcessor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;
@Slf4j
@Component
public class UserDataProcessor implements DataProcessor<User> {

    @Override
    public void process(List<User> userList) {
        // 数据验证可以放在 DataProcessor 中或在此处进行
        boolean isValid = validateUserData(userList);
        if (!isValid) {
            log.error("数据验证失败");
            // 可以选择抛出自定义异常以终止导入过程
            //throw new BusinessException("数据验证失败");
            return;
        }
        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
        String encodedPassword = encoder.encode("111"); // 或根据需要动态生成
        // 实现数据处理逻辑，例如清洗、转换等
        for (User user : userList) {
            // 生成一个 32 字符的字符串，不含破折号（-）
            String id = UUID.randomUUID().toString().replace("-", "");
            user.setUserId(id);
            user.setPassword(encodedPassword);
            // 导入的用户默认为当前登录用户同一租户
            // 动态获取当前登录用户信息
            LoginUser loginUser = (LoginUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
            user.setTenantId(loginUser.getTenantId());
            user.setDefaultRole("ROLE_user");
            user.setRegisterType("0");
            user.setDelFlag("1");
            user.setCreateId(loginUser.getUsername());
            user.setUpdateId(loginUser.getUsername());
            user.setCreateTime(LocalDateTime.now());
            user.setUpdateTime(LocalDateTime.now());
        }
    }
    private boolean validateUserData(List<User> userList) {
        for (User user : userList) {
            if (!StringUtils.hasText(user.getUsername())) {
                log.warn("用户名为空: " + user);
                return false;
            }

        }
        return true;
    }
}
